#include "T_KeyFrameTableViewModel.h"
#include <QTime>
#include <qnamespace.h>

T_KeyFrameTableViewModel::T_KeyFrameTableViewModel(QObject* parent)
    : QAbstractTableModel(parent)
{
    m_headers << "关键帧" << "分析";
    
    // 初始化示例数据
    QTime base(0, 0, 0);
    m_data = {
    {QPixmap(":/medical/frame1.jpg").scaled(160, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation),
    base.toString("yyyy-MM-dd hh:mm:ss.zzz"), 
    "设备监控\n景别：中景\n内容：心电监护仪显示\n参数：HR 72bpm SpO₂ 98%"},

    {QPixmap(":/medical/frame2.jpg").scaled(160, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation),
    base.addMSecs(2345).toString("yyyy-MM-dd hh:mm:ss.zzz"),
    "操作记录\n运镜：俯拍+推镜\n内容：护士静脉注射肝素\n细节：针头45°穿刺手法"},

    {QPixmap(":/medical/frame3.jpg").scaled(160, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation),
    base.addSecs(5).toString("yyyy-MM-dd hh:mm:ss.zzz"),
    "报警特写\n景别：大特写\n内容：呼吸机报警提示\n参数：PEEP 8cmH₂O FiO₂ 45%"},

    {QPixmap(":/medical/frame4.jpg").scaled(160, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation),
    base.addSecs(8).toString("yyyy-MM-dd hh:mm:ss.zzz"),
    "抢救记录\n运镜：跟拍+摇镜\n内容：除颤仪充电过程\n能量选择：200J 非同步模式"}
    };
}

T_KeyFrameTableViewModel::~T_KeyFrameTableViewModel() {}

int T_KeyFrameTableViewModel::rowCount(const QModelIndex&) const
{
    return m_data.size();
}

int T_KeyFrameTableViewModel::columnCount(const QModelIndex&) const
{
    return m_headers.size();
}

QVariant T_KeyFrameTableViewModel::data(const QModelIndex& index, int role) const
{
    if (!index.isValid() || index.row() >= m_data.size()) 
        return QVariant();

    const auto& item = m_data[index.row()];
    
    switch(role) {
    case Qt::DecorationRole:
        if(index.column() == 0) 
            return item.thumbnail;
        break;
        
    case Qt::DisplayRole:
        switch(index.column()) {
        case 0: return QVariant(); // 图片列不显示文字
        case 1: return QString("%1\n%2").arg(item.timestamp, item.analysis);
        }
        break;
        
    case Qt::TextAlignmentRole:
        // return Qt::AlignTop | Qt::AlignLeft;  // 分析列顶部对齐
        return Qt::AlignCenter;
        
    case Qt::SizeHintRole:
        if(index.column() == 0)
            return QSize(160, 90);  // 固定图片单元格尺寸
        return QSize(-1, 90);       // 分析列最小行高
    }
    
    return QVariant();
}

QVariant T_KeyFrameTableViewModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
        return m_headers.value(section);
    }
    return QAbstractTableModel::headerData(section, orientation, role);
}

void T_KeyFrameTableViewModel::appendData(const KeyFrameItem& item) {
    beginInsertRows(QModelIndex(), m_data.size(), m_data.size());
    m_data.append(item);
    endInsertRows();
    // 可选：通知视图更新该行
    emit dataChanged(index(m_data.size()-1, 0), index(m_data.size()-1, m_headers.size()-1));
}

void T_KeyFrameTableViewModel::clearData() {
    if (m_data.isEmpty()) return;
    const int last = m_data.size() - 1;
    beginRemoveRows(QModelIndex(), 0, last);
    m_data.clear();
    endRemoveRows();
}